package com.ftg.learn.chapter17.card;

import lombok.Data;

import java.util.*;

/**
 * @author KangJx
 * @date 2021/8/13
 */

@Data
public class Play {

    /**
     * 是不是就是一副牌
     */
    private List<Card> list;

    /**
     * 初始牌
     */
    public void init(){

        createCard(CardType.A);
        createCard(CardType.B);
        createCard(CardType.C);
        createCard(CardType.D);
        list.add(new Card("大王",CardType.E));
        list.add(new Card("小王",CardType.E));
//        Random r = new Random();
//        /**
//         * 如果 a = 0 CardType.A 红桃
//         * 如果 a = 1 CardType.B 方块
//         * 如果 a = 2 CardType.c 黑桃
//         * 如果 a = 3 CardType.e 草花
//         * 如果 a = 4 CardType.e 王
//         */
//        int a = r.nextInt(5);
//        System.out.println(a);
//        switch (a){
//            case 0:
//                createCard(CardType.A);
//                break;
//            case 1:
//                createCard(CardType.B);
//                break;
//            case 2:
//                createCard(CardType.C);
//                break;
//            case 3:
//                createCard(CardType.D);
//                break;
//            default:
//                list.add(new Card("大王",CardType.E));
//                list.add(new Card("小王",CardType.E));
//        }

    }

    /**
     * 洗牌方法
     */
    public void xipai(){
        Collections.shuffle(this.getList());
    }

    /**
     * 生成游戏为三家发牌以及三张底牌
     * @return
     */
    public Map<String,List<Card>> fapai(){
        //四方
        Map<String,List<Card>> map = new HashMap<>(4);
        int num = this.getList().size() / 3 - 1;
        map.put("玩家一",fapai(0,num));
        map.put("玩家二",fapai(num, 2*num));
        map.put("玩家三",fapai(2*num,3*num));
        map.put("底牌",fapai(3*num,this.getList().size()));
        return map;
    }

    /**
     * 依次循环大家自己来写一下
     * 通过开始和结束生成新的列表
     * @param begin
     * @param end
     * @return
     */
    private List<Card> fapai(int begin ,int end){
        List<Card> pai = new ArrayList<>();
        for(int i = begin,len = end;i < len;i++){
            pai.add(this.getList().get(i));
        }
        return pai;
    }


    /**
     * 可以创建一个花色的所有牌
     * @param ct
     * @return
     */
    private void createCard(CardType ct){
        if(this.getList() == null || this.getList().isEmpty()){
            this.setList(new ArrayList<>());
        }
        for(int i =0 ,len = 13;i < len;i++){
            this.getList().add(new Card(val(i) , ct));
        }
    }

    /**
     * 对牌的面值进行处理
     * @param i  面值
     * @return
     */
    private String val(int i ){
        String val = "";
        if(i == 0){
            val = "A";
        }else if(i == 10){
            val = "J";
        }else if(i == 11){
            val = "Q";
        }else if(i == 12){
            val = "K";
        }else {
            val = (i + 1) + "";
        }
        return val;
    }

    public static void main(String[] args) {
        Play p = new Play();

        p.init();
        p.xipai();

        Map<String,List<Card>> map = p.fapai();
        System.out.println("玩家一" +map.get("玩家一"));
        System.out.println("玩家二" +map.get("玩家二"));
        System.out.println("玩家三" +map.get("玩家三"));
        System.out.println("底牌" +map.get("底牌"));
    }

}
